package com.spzx.product.mapper;

import com.spzx.product.domain.SkuStock;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 商品sku库存表 Mapper 接口
 * </p>
 *
 * @author Haoran Sun
 * @since 2024-07-15
 */
public interface SkuStockMapper extends BaseMapper<SkuStock> {
    /**
     *批量跟新库存表的状态
     */
    void updateBatch(@Param(value = "skuStock") SkuStock skuStock,
                     @Param(value = "skuIds") List<Long> skuIds);

    /**
     * 检查库存
     * @param skuId 商品skuId
     * @param skuNum 购买数量
     * @return 查询出来的结果
     */
    SkuStock check(@Param(value = "skuId")Long skuId,
                   @Param(value = "skuNum")Integer skuNum);

    /**
     * 锁定库存
     * @param skuId 商品skuId
     * @param skuNum 锁定数量
     * @return 锁定结果
     */
    int lock(@Param(value = "skuId") Long skuId,
             @Param(value = "skuNum") Integer skuNum,
             @Param(value = "orderNo") String orderNo);

    /**
     * 解锁库存
     * @param skuId 商品skuId
     * @param skuNum 解锁数量
     * @param updateBy 更新人 一般是订单id
     * @return 解锁结果
     */
    int unLock(@Param(value = "skuId") Long skuId,
               @Param(value = "skuNum")Integer skuNum,
               @Param(value = "updateBy")String updateBy);

    /**
     * 减库存
     * @param skuId 商品skuId
     * @param skuNum 减库存数量
     * @param orderNo 订单号
     * @return 减库存结果
     */
    int minus(@Param(value = "skuId") Long skuId,
              @Param(value = "skuNum")Integer skuNum,
              @Param(value = "orderNo")String orderNo);
}
